Memory leaks are a common error in computer programming. They occur when memory is apparently or actually allocated for use by a program, but is not being used and will not be used because it has not been freed for use. Hence, the memory may become effectively unavailable for computational use until the process restarts and/or the computing system reboots and all of the memory not taken by the system and other processes is again marked as available for use. Leaks reduce the total amount of available memory, which ultimately reduces or terminates the functionality of software running on the system until the system is again rebooted. The memory leaked is most frequently user-space random access memory (RAM), but other types of memory such as kernel RAM and hard disk storage are also subject to leaks.